# 装饰器的功能：
# 装饰器可以让其他函数或类在不需要做额外代码修改的前提下，在代码运行期间动态增加功能的方式。
# 装饰器的本质：
# 装饰器本质上是一个接受函数作为参数的可调用对象（通常是函数），并返回一个新的函数对象。这个新的函数对象通常会包装或扩展原始函数的行为。
# 装饰器的一般写法(闭包写法)
# def outer(func):
#     def inner():
#         print("我睡觉了")
#         func()
#         print("我起床了")
#     return inner
# def sleep():
#     import random
#     import time
#     print("睡眠中......")
#     time.sleep(random.randint(1, 5))
# fn = outer(sleep)
# fn()

# 装饰器的快捷写法(语法糖)
def outer(func):
    def inner():
        print("我睡觉了")
        func()
        print("我起床了")
    return inner
@outer
def sleep():
    import random
    import time
    print("睡眠中......")
    time.sleep(random.randint(1, 5))
sleep()